/*
  连续素数和
  题目描述
    一些正整数可以由一个或多个连续素数的和来表示。
    一个给定的正整数有多少种这样的表示方法？
    例如，整数 53 有两种表示方法 5＋7＋11＋13＋17 和 53。
          整数 41 有三种表示方法 2＋3＋5＋7＋11＋13, 11＋13＋17，41。
          整数 3 只有一种表示方法，即 3。
          但整数 20 没有这样的表示方法。
    请注意，必须是连续素数，所以无论是 7＋13 还是 3＋5＋5＋7 都不是整数 20 的有效表示方法。

    您的任务是编写一个程序，报告给定正整数的表示方法数。
  输入
    输入是一个正整数序列，每个数都在一个单独的行中。
    正整数的范围在 2 到 10000 之间（包含 2 和 10000）。末尾的 0 表示输入结束。
  输出
    输出为给定正整数的表示方法的种数。
    每个答案都在一个单独的行中，与输入相对应，0 除外。在输出中不应插入其他字符。
  输入数据 1
    2
    3
    17
    41
    20
    666
    12
    53
    0
  输出数据 1
    1
    1
    2
    3
    0
    0
    1
    2
*/

#include <bits/stdc++.h>

using namespace std;

int a[10005] = {};      // 数组 a 用来存放质数
int b[10005] = {1, 1};  // b[i] 表示整数 i 表示是否是质数: 0 表示是质数或者未判断，1 表示非质数(合数)

// 该函数用来判断输入参数 x (2 <= x <= 10000) 是否为素数
bool f(int x) {
    int i = 0;
    while (a[i] <= x) {
        if (a[i] == x) {
            return true;
        }
        i += 1;
    }

    return false;
}

int main() {
    int n = 10000, sum = 0;

    // 使用"线性筛法"求 2 ~ 100000 之间的所有素数(质数), 并将找到的素数放到数组 a 中
    for (int i = 2; i <= n; i++) {
        // 如果 i 是质数，则将其放到数组 a 中
        if (b[i] == 0) { // 注意: 这里当 b[i] == 0，则 i 一定是质数！！！而不是未判断!
            a[sum++] = i;
        }

        /*
          针对 i，遍历小于等于 i 的所有质数，针对每个质数进行如下处理(即循环体中的处理):
            1). 如果质数和 i 的乘积小于 n，则将该质数和 i 的乘积筛掉(标记该乘积为非质数)
                否则，循环退出；
            2). 当该质数是 i 的因数时，循环退出；
        */
        for (int j = 0; j < sum; j++) {
            if (a[j] * i <= n) {
                b[a[j] * i] = 1;
            } else {
                break;
            }
            if (i % a[j]  == 0) {
                break;
            }
        }
    }

    while (1) {
        int x;
        cin >> x;
        if (x == 0) {
            return 0;
        } else {
            int num = 0;
            int ans = 0;

            /* 求正整数 x 可以由多少组连续素数的和来表示 */

            /* 1. 如果正整数 x 本身就是素数，那么组数 + 1 */
            if (f(x)) {
                 num++;
            }

            /* 2. 遍历数组 a 中所有小于 x 的元素(素数)，计算有多少组满足要求的连续素数和 */
            while (a[ans] < x) {
                int cmp = ans;
                int h = 0;
                while (h <= x) {
                    if (h + a[cmp] == x) {
                        num++;
                        h = 0;
                        break;
                    }
                    h = h + a[cmp];
                    cmp++;
                }
                ans++;
            }
            cout << num << endl;
        }
    }

    return 0;
}